


#include "Spring.h"




Spring::Spring()
{


}


void Spring::CalcularFuerzaInterna()
{
	double dblConstTemp;

	Vector vA(objNodo1.getVertice()->getX(),objNodo1.getVertice()->getY(),
		objNodo1.getVertice()->getZ());
	Vector vB(objNodo2.getVertice()->getX(),objNodo2.getVertice()->getY(),
	    objNodo2.getVertice()->getZ());

	//Calculando direccion 1-2
	vDirNodo12 = RestaVectorial(vA,vB);
	vDirNodo12.ConvVectorUnitario();

	//Calculando direccion 2-1
	vDirNodo21 = RestaVectorial(vB,vA);
	vDirNodo21.ConvVectorUnitario();

	CalcularActualLong();

	dblConstTemp = -dblConstantK*(dblLongActual-dblLongRest);

	if(intNodoCalculado == 1)
	{
		vfuerzaInterna = ProductoEscalarVector(dblConstTemp,vDirNodo12);
	}
	else if(intNodoCalculado == 2)
	{
		vfuerzaInterna = ProductoEscalarVector(dblConstTemp,vDirNodo21);
	}
	else
	{
		throw new exception;
	}
}

void Spring::CalcularRestLong(){
	dblLongRest = CalcularLongNodos();
}

void Spring::CalcularActualLong(){
	dblLongActual = CalcularLongNodos();
}

double Spring::CalcularLongNodos(){
	return  sqrt(pow(objNodo1.getVertice()->getX()-objNodo2.getVertice()->getX(),2)
		+ pow(objNodo1.getVertice()->getY()-objNodo2.getVertice()->getY(),2)
		+ pow(objNodo1.getVertice()->getZ()-objNodo2.getVertice()->getZ(),2));
}
